// 自定义的jquery函数
// 调用这个方法 可以获取到表单里面所有的信息 变成一个json字符串
$.fn.extend({
    serializeJson: function () {
        var json = {}; // 就是一个javascript的对象.
        // 1.通过jquery提供的serializeArray方法得到不符合要求的json串
        var msg = this.serializeArray();
        $(msg).each(function () {
            if (json[this.name]) { // 在json对象中没有this.name对应的值
                // 有,需要考虑一个名称对应多个值，而这些值应该放入到数组中
                if (!json[this.name].push) { // 如果为true,代表是数组,如果为false，代表不是数组
                    json[this.name] = [json[this.name]];
                }
                json[this.name].push(this.value || ''); // 装入到数组
            } else {
                // 没有
                json[this.name] = this.value || '';
            }
        });
        return json
    }
});
// 调用这个方法 可以把json字符串放入到form表单中
$.fn.populateForm = function (data) {
    return this.each(function () {
        var formElem, name;
        if (data == null) {
            this.reset();
            return;
        }
        for (var i = 0; i < this.length; i++) {
            formElem = this.elements[i];
            //checkbox的name可能是name[]数组形式
            name = (formElem.type == "checkbox") ? formElem.name.replace(/(.+)\[\]$/, "$1") : formElem.name;
            if (data[name] == undefined) continue;
            switch (formElem.type) {
                case "checkbox":
                    if (data[name] == "") {
                        formElem.checked = false;
                    } else {
                        //数组查找元素
                        if (data[name].indexOf(formElem.value) > -1) {
                            formElem.checked = true;
                        } else {
                            formElem.checked = false;
                        }
                    }
                    break;
                case "radio":
                    if (data[name] == "") {
                        formElem.checked = false;
                    } else if (formElem.value == data[name]) {
                        formElem.checked = true;
                    }
                    break;
                case "button":
                    break;
                default:
                    formElem.value = data[name];
            }
        }
    });
};